#ifndef __HOSTILE_ENTITY_STATES_HPP
#define __HOSTILE_ENTITY_STATES_HPP

#include "../BaseState.hpp"
#include "HostileEntityStateNames.hpp"
#include "../Particles/BaseEmitter.hpp"

class AnimatedSprite;
class HostileEntity;
class MMessage;

class HostileListen : public BaseState<HostileEntity, HostileEntityStateName>
{
public:
	HostileListen() { m_stateName = HESN_LISTEN; }

	void beginState(HostileEntity*);
	void updateState(HostileEntity*, clock_t);
	void endState(HostileEntity*);
	void handleMessage(HostileEntity*, MMessage* pMsg);
};

class HostileIdle : public BaseState<HostileEntity, HostileEntityStateName>
{
public:
	HostileIdle() { m_stateName = HESN_IDLE; }
	//~HostileIdle();

	void beginState(HostileEntity*);
	void updateState(HostileEntity*, clock_t);
	void endState(HostileEntity*);
	void handleMessage(HostileEntity*, MMessage* pMsg) {};
};

class HostileMove : public BaseState<HostileEntity, HostileEntityStateName>
{
public:
	HostileMove() { m_stateName = HESN_MOVE; }
	//~HostileMove();

	void beginState(HostileEntity*);
	void updateState(HostileEntity*, clock_t);
	void endState(HostileEntity*);
	void handleMessage(HostileEntity*, MMessage* pMsg) {};
};

class HostileAttack : public BaseState<HostileEntity, HostileEntityStateName>
{
public:
	HostileAttack() { m_stateName = HESN_ATTACK; }
	//~HostileAttack();

	void beginState(HostileEntity*);
	void updateState(HostileEntity*, clock_t);
	void endState(HostileEntity*);
	void handleMessage(HostileEntity*, MMessage* pMsg) {};
};

class HostileExplode : public BaseState<HostileEntity, HostileEntityStateName>
{
public:
	HostileExplode() { m_stateName = HESN_EXPLODE; }
	~HostileExplode();

	void beginState(HostileEntity*);
	void updateState(HostileEntity*, clock_t);
	void endState(HostileEntity*);
	void handleMessage(HostileEntity*, MMessage* pMsg) {};

private:
	AnimatedSprite* m_pExplodeAnim;
};

class HostileDie : public BaseState<HostileEntity, HostileEntityStateName>
{
public:
	HostileDie() { m_stateName = HESN_DIE; m_pExplosionEmitter = 0;}
	~HostileDie();

	void beginState(HostileEntity*);
	void updateState(HostileEntity*, clock_t);
	void endState(HostileEntity*);
	void handleMessage(HostileEntity*, MMessage* pMsg) {};

private:
	BaseEmitter* m_pExplosionEmitter;
};

//class HostileGetDmg : public BaseState<HostileEntity, HostileEntityStateName>
//{
//public:
//	HostileGetDmg() { m_stateName = HESN_GET_DMG; }
//	//~HostileGetDmg();
//
//	void beginState(HostileEntity*);
//	void updateState(HostileEntity*, clock_t);
//	void endState(HostileEntity*);
//	void handleMessage(HostileEntity*, MMessage* pMsg) {};
//}

#endif //__HOSTILE_ENTITY_STATES_HPP

//EOF
